package com.starview.star.operators;

import com.starview.platform.data.type.IType;



/**
 * Cafe built-in functions implement the ICafeBuiltin interface.
 * 
 * @author fgm
 * 
 */
public interface ICafeBuiltin
{
  /**
   * The name of the built-in function
   * 
   * @return
   */
  String getName();

  /**
   * All built-ins expose a means of getting their type
   * 
   * @return the type of the built-in
   */
  IType getType();

  /**
   * The java name of the built-in. This name must obey the Java rules for
   * identifiers.
   */
  String getJavaName();

  /**
   * The Java type of the function
   */
  String getJavaType();

  /**
   * The java descriptor of the function
   */
  String getJavaSig();

  /**
   * The name of the Java method to invoke
   * 
   * @return
   */
  String getJavaInvokeName();

  /**
   * The java invoke signature of the function
   */
  String getJavaInvokeSignature();

  /**
   * Should this be invoked as a static function? Implies that the builtin
   * cannot be the value of a variable
   * 
   * @return
   */
  boolean isStatic();

  /**
   * Return the class name that implements this built-in function
   * 
   * @return the implementation class for this builtin
   */
  Class<?> getImplClass();
}
